#include "lvgl/lvgl.h"
#include "lvgl/demos/lv_demos.h"
#include <unistd.h>
#include <pthread.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../my_codeh/display.h"
#include <sys/wait.h>
#include "../my_codeh/speech.h"
#include "../my_codeh/say_boot.h"
// 定义软件盒子页面对象
lv_obj_t *app_box_scr = NULL;
lv_obj_t * win1;
lv_obj_t * gif;
lv_obj_t *label_end;

// 应用图标点击事件
//分四个讨论
static void app_icon_click1(lv_event_t *event) //点击第一个图标
{   
    LV_LOG_USER("111\n");
    lv_obj_add_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    if(fork() == 0) //  子进程,播放媒体文件
    {
        int r = execlp("./piano",NULL);
        if(r == -1)
        {
            perror("execlp error");
            exit(-1);
        }
    }
    else            //  父进程,执行控制命令
    {
        wait(NULL);
        lv_obj_remove_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
        
    }
}
static void app_icon_click2(lv_event_t *event) //点击第二个图标
{   
    LV_LOG_USER("222\n");
    lv_obj_add_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    if(fork() == 0) //  子进程,播放媒体文件
    {
        int r = execlp("./cell",NULL);
        if(r == -1)
        {
            perror("execlp error");
            exit(-1);
        }
    }
    else            //  父进程,执行控制命令
    {
        wait(NULL);
        lv_obj_remove_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    }
}
static void app_icon_click3(lv_event_t *event) //点击第三个图标
{   
    LV_LOG_USER("333\n");
    lv_obj_add_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    if(fork() == 0) //  子进程,播放媒体文件
    {
        int r = execlp("./video",NULL);
        if(r == -1)
        {
            perror("execlp error");
            exit(-1);
        }
    }
    else            //  父进程,执行控制命令
    {
        wait(NULL);
        lv_obj_remove_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    }
    
}
static void app_icon_click4(lv_event_t *event) //点击第三个图标
{   
    LV_LOG_USER("444\n");
    lv_obj_add_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    if(fork() == 0) //  子进程,播放媒体文件
    {
        int r = execlp("./wuzi",NULL);
        if(r == -1)
        {
            perror("execlp error");
            exit(-1);
        }
    }
    else            //  父进程,执行控制命令
    {
        wait(NULL);
        lv_obj_remove_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    }
}
static void app_icon_click5(lv_event_t *event) //点击第三个图标
{   
    LV_LOG_USER("555\n");
    Automatic_Speech_Recognition(); 
}


// 创建单个应用图标
static void create_app_icon(lv_obj_t *parent, app_item_t *app, int x, int y,int num)
{   
    // 图标容器(图标)
    lv_obj_t *icon_cont = lv_obj_create(parent);//以最开始的界面为父对象，在此基础建立四个图标
    lv_obj_set_size(icon_cont, 80, 80);  // 图标总尺寸
    lv_obj_set_pos(icon_cont, x, y);
    lv_obj_set_style_bg_opa(icon_cont, 0, 0);  // 透明背景
    lv_obj_set_style_border_opa(icon_cont, 0, 0);  // 无边框
    lv_obj_set_style_radius(icon_cont,10,0);//弧度圆角
    lv_obj_set_style_shadow_width(icon_cont,10,0);//点击后会产生阴影，产生反馈
    lv_obj_set_style_shadow_color(icon_cont,lv_color_hex(0x888888),0);//对应的颜色

    lv_obj_set_scrollbar_mode(icon_cont,LV_SCROLLBAR_MODE_OFF);
    lv_obj_clear_flag(icon_cont,LV_OBJ_FLAG_SCROLLABLE);//禁止滚动的代码

    lv_obj_set_style_bg_color(icon_cont,lv_color_hex(0xd0d0d0),LV_STATE_PRESSED);
    lv_obj_set_style_shadow_width(icon_cont,2,LV_STATE_PRESSED);//对饮阴影的宽度
    lv_obj_set_style_translate_y(icon_cont,2,LV_STATE_PRESSED);
    lv_obj_add_flag(icon_cont,LV_OBJ_FLAG_CLICKABLE);
    
    // 应用图标
    lv_obj_t *icon_img = lv_img_create(icon_cont);//以图标容器为父对象了
    lv_image_set_src(icon_img, app->icon_src);//输入对应的名字，结构体的作用
    lv_obj_set_size(icon_img, 80, 80);  // 图标大小
    lv_obj_align(icon_img, LV_ALIGN_TOP_MID, 0, -22);  // 图标居上   具体坐标还是做了一点调试
    switch (num)//通过这个来重复建立四个应用，根据num的不同来确定每一个不同的回调函数
    {
    case 1 : lv_obj_add_event_cb(icon_cont, app_icon_click1, LV_EVENT_CLICKED, NULL); break;
    case 2 : lv_obj_add_event_cb(icon_cont, app_icon_click2, LV_EVENT_CLICKED, NULL); break;
    case 3 : lv_obj_add_event_cb(icon_cont, app_icon_click3, LV_EVENT_CLICKED, NULL); break;
    case 4 : lv_obj_add_event_cb(icon_cont, app_icon_click4, LV_EVENT_CLICKED, NULL); break;
    case 5 : lv_obj_add_event_cb(icon_cont, app_icon_click5, LV_EVENT_CLICKED, NULL); break;
    
    }
    

    
    //应用名称
    lv_obj_t *icon_label = lv_label_create(parent);//后续补的名字 以白底为父对象
    lv_label_set_text(icon_label, app->name);//结构体的名字
    lv_obj_set_style_text_font(icon_label, &lv_font_montserrat_10, 0);
    int y1 = y+90;
    int x1 = x+10;
    lv_obj_set_pos(icon_label, x1, y1);//x y 是以图标的位置进行确定然后总体向下进行偏移调试确定位置


}

// 退出按钮点击事件（返回启动界面）
static void exit_btn_click(lv_event_t *event)//退出按钮的回调函数
{
    if (lv_event_get_code(event) == LV_EVENT_CLICKED) 
    {
        // 隐藏软件盒子界面
        lv_obj_add_flag(app_box_scr, LV_OBJ_FLAG_HIDDEN);
    }
    win1=lv_obj_create(lv_screen_active());
    lv_obj_set_size(win1,480,480);
    lv_obj_set_pos(win1,160,0);
    gif=lv_gif_create(win1);
    lv_gif_set_src(gif,"A:/lingke/preview.gif");
    lv_obj_set_align(gif,LV_ALIGN_CENTER);//动图显示

    label_end = lv_label_create(win1);//文字显示
    lv_label_set_text(label_end, "Good Game");
    lv_obj_set_style_text_font(label_end, &lv_font_montserrat_32, 0);
    lv_obj_set_style_text_color(label_end, lv_color_hex(0xEE6AA7), 0);  // 粉色文字
    lv_obj_center(label_end);
    return;//退出
}

// 创建软件盒子界面
void create_app_box_screen()//一开始的初始父对象，在这上面建立四个图标和退出按钮
{
    // 创建全屏白色背景父对象
    app_box_scr = lv_obj_create(lv_scr_act());//在开始就定义，方便作为全局变量调用
    lv_obj_set_size(app_box_scr, lv_obj_get_width(lv_scr_act()), lv_obj_get_height(lv_scr_act()));
    lv_obj_set_style_bg_color(app_box_scr, lv_color_hex(0xFFFFFF), 0);  // 白色背景
    lv_obj_set_style_border_opa(app_box_scr, 0, 0);  // 无边框

    lv_obj_set_scrollbar_mode(app_box_scr,LV_SCROLLBAR_MODE_OFF);
    lv_obj_clear_flag(app_box_scr,LV_OBJ_FLAG_SCROLLABLE);//禁止滚动的代码
    // 计算屏幕中心位置，用于图标布局
    int screen_w = lv_disp_get_hor_res(NULL);  //以屏幕中心作为初始坐标，用来方便计算图标位置
    int screen_h = lv_disp_get_ver_res(NULL);  
    
    // 布局四个图标（2x2网格）
    int icon_gap = 60;  // 图标间距
    int start_x = (screen_w - (2 * 120 + icon_gap)) / 2;  // 水平居中起始X
    int start_y = (screen_h - (2 * 140 + icon_gap)) / 2;  // 垂直居中起始Y
    
    // 第一行图标
    create_app_icon(app_box_scr, &app_list[0], start_x, start_y-50,1);//这里是具体的四个图标的创建，x,y是经过计算调试的位置，1，2，3，4是对应的回调函数
    create_app_icon(app_box_scr, &app_list[1], start_x + 120 + icon_gap, start_y-50,2);
    // 第二行图标
    create_app_icon(app_box_scr, &app_list[2], start_x, start_y + 140 + icon_gap-50,3);
    create_app_icon(app_box_scr, &app_list[3], start_x + 120 + icon_gap, start_y + 140 + icon_gap-50,4);

    //语音识别
    create_app_icon(app_box_scr, &app_list[4], start_x + 360 + icon_gap, start_y-70,5);
    // 创建退出按钮（底部居中）
    lv_obj_t *exit_btn = lv_btn_create(app_box_scr);//退出按钮
    lv_obj_set_size(exit_btn, 150, 60);  // 按钮大小
    lv_obj_align(exit_btn, LV_ALIGN_BOTTOM_MID, 0, 0);  // 底部居中
    lv_obj_set_style_bg_color(exit_btn, lv_color_hex(0xFF5252), 0);  // 红色按钮
    lv_obj_set_style_radius(exit_btn, 8, 0);  // 圆角
    lv_obj_add_event_cb(exit_btn, exit_btn_click, LV_EVENT_CLICKED, NULL);//回调函数
    
    // 退出按钮文字
    lv_obj_t *exit_label = lv_label_create(exit_btn);
    lv_label_set_text(exit_label, "EXIT");
    lv_obj_set_style_text_font(exit_label, &lv_font_montserrat_20, 0);
    lv_obj_set_style_text_color(exit_label, lv_color_hex(0xFFFFFF), 0);  // 白色文字
    lv_obj_center(exit_label);
    
    lv_obj_t *test = lv_label_create(app_box_scr);
    lv_label_set_text(test, "Game Box");
    lv_obj_set_style_text_font(test, &lv_font_montserrat_40, 0);
    lv_obj_set_pos(test, 0, 200);
}





